#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ipc.h>
#include <sys/msg.h>

union val_t
{
    int b_val;  // bool类型存储空间
    int i_val;   // 整形值存储空间
    float f_val; // 浮点值存储空间
};

struct control
{
    long Equ;        // 消息类型
    int key;         // 设备ID
    char name[32];   // 设备名称
    union val_t val; // 数据设置
    int addr;        // 线圈寄存器
    int type;        // 数据点值的类型，1：bool类型 2：int型  3：float型
};
// 创建消息队列的键值
#define MSG_KEY 1234

int main() {
    // 创建消息队列
    int msgid = msgget("msg", 0666 | IPC_CREAT);
    if (msgid == -1) {
        perror("msgget");
        exit(1);
    }

    // 准备要发送的消息
    struct control msg;
    msg.type = 32; // 假设这是期望的消息类型
    msg.key = 308; // 示例设备ID
    strcpy(msg.name, "ExampleDevice");
    msg.val.i_val = 1; // 示例整型值
    msg.addr = 0; // 示例地址
    msg.type = 2; // 假设这是整型值

    // 发送消息
    if (msgsnd(msgid, &msg, sizeof(msg) - sizeof(msg.type), 0) == -1) {
        perror("msgsnd");
        exit(1);
    }

    printf("Message sent to queue successfully.\n");

    // 清理消息队列资源
    if (msgctl(msgid, IPC_RMID, NULL) == -1) {
        perror("msgctl");
        exit(1);
    }

    return 0;
}